#include "cpu/exec/template-start.h"
#define instr ret

make_helper(concat(ret_n_, SUFFIX)){
    cpu.eip = MEM_R(reg_l(R_ESP));
    if(DATA_BYTE == 2)cpu.eip &= 0xffff;
    reg_l(R_ESP) += DATA_BYTE;
    print_asm("ret");
    return 0;
}

make_helper(concat(ret_i_, SUFFIX)){
    int val = instr_fetch(eip + 1, DATA_BYTE);
    cpu.eip = MEM_R(REG(R_ESP));
    if(DATA_BYTE == 2)cpu.eip &= 0xffff;
    REG(R_ESP) += DATA_BYTE;
    int i;
    for(i = 0; i < val; i += DATA_BYTE)MEM_W(REG(R_ESP) + i, 0);
    REG(R_ESP) += val;
    print_asm("ret\t$0x%x", val);
    return 0;
}

#include "cpu/exec/template-end.h"